/*
 * @Author: your name
 * @Date: 2021-05-05 09:59:16
 * @LastEditTime: 2021-05-05 10:24:48
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \express_serve\app.js
 */

 const app = require("express")();
 //把websocket里面的方法集成到express里面了;
 const wsInstance = require("express-ws")(app);

//app.ws ----回调函数里面---有两个参数;
//第一个参数  ws---表示websocket实例;---这个实例--可以监控客户端传递的消息发送事件;(message)
//第二个参数  req----request实例----可以通过解析这个对象，拿到相应传递过来的参数
app.ws("/",ws=>{
    ws.on("message",data=>{
        //通过websocket 接收到客户端传递过来信息时候所触发的事件；
        //只是做视频通话，没有什么业务逻辑；---收到消息之后直接返回给客户端;
        wsInstance.getWss().clients.forEach(server=>{
            if(server!==ws){
                //ws----send方法---往浏览器socket发送数据
                server.send(data);
            }
        })
    })
})


app.listen(8989,()=>{
    console.log('websocket服务已开启在8989')
});

//websocket在视频通话所起到的作用-----也就是---获取双方信息---再推送给对方而已;
//真正的视频通话功能通过webrtc---这个协议来进行;
//webrtc-----基于网页提供语音对话，或视频通话功能的服务;
//-----音视频的采集---数据编解码，网络传输，展示....


// 通话步骤
// 浏览器A ---和一个浏览器B---进行音视频通话;
// 1:A,B 都连接信号服务器; ---(ws);
// 2:A---开启一个本地视频，并且获取会话描述对象;----A的一个信息对象;
// 3:A---offer sdp,通过websocket协议推送给B;
// 4:B---接收到信息之后，B创建本地视频，并且获取会话描述对象;
// 5:B将anser sdp 通过ws发送给A；
// //webrtc;
// 6:A和B之间开始 ---打洞----收集并通过交换ice信息;----
// 7:完成打洞，A和B开始为了安全的媒体通信---协商密钥;
// 8:A和B就可以正常的视频通话;

// ----A和B连接之前需要交换信息----所以必须使用webscoket;--信令服务器的功能用于转发
// webrtc---不借助于任何中间媒介----换句话说就是不需要中转；-----直接在两个实体(浏览器之间)
// 进行传输数据;